package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.BeneficiarioVO;
import com.cs.beneficios.business.model.CondicionConsultaVO;
import com.cs.beneficios.business.model.RepAtributoVO;
//import com.cs.beneficios.business.model.RepBeneficioOtorgadoVO;
//import com.cs.beneficios.business.model.RepDetBOTVO;
import com.cs.beneficios.business.model.RepDetBeneficiarioVO;
//import com.cs.beneficios.business.model.VflexVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

//import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
//import java.util.Vector;

import oracle.jdbc.OracleTypes;

public class RepDetBeneficiarioDAO 
{
  /**
   * Conexion a la base de datos.
   */
  private Connection conn = null;
  //private Connection connEsp = null;
  private ConnectionFactory cf;
  //private int contEsp = 0;
  //private int swEsp = 0;
  //private int contGen = 0;
  //private int swGen = 0;
  
  private boolean checkFiltersEsp = false;
  private boolean checkFiltersGen = false;
  
  
   /**
   * Constructor que inicializa la conexion con la base de datos.
   * @param conn Conexion con la base de datos.
   */
  public RepDetBeneficiarioDAO(ConnectionFactory cf)
  {
    this.cf = cf;
    try{
      this.conn = this.cf.getConnection();
    }catch(SQLException e){}
  }
  
    public int getCantidadBeneficiarios(RepDetBeneficiarioVO criterea) throws SQLException
  {
    String query = "SELECT COUNT(1) FROM(SELECT TO_CHAR(beneotor.FECHA_BENEFICIO,'DD/MM/RRRR') fechabeneficio, beneotor.CODIGO codbeneotor, beneotor.BEN_CODIGO codbeneficiario, sede.CODIGO codsede, "+
                   "sede.NOMBRE nomsede, prog.CODIGO codpro, prog.NOMBRE nompro, "+
                   "subpro.CODIGO codsubpro, subpro.NOMBRE nomsubpro "+
                   "FROM TCS_BEN_PROGRAMA prog, TCS_BEN_SUBPROGRAMA subpro, "+
                   "TCS_BEN_BENEFICIO_OTORGADO beneotor, TCS_BEN_SEDE sede, "+
                   "TCS_BEN_BENEFICIARIO beneficiario "+  
                   "WHERE beneotor.SBPR_CODIGO =  subpro.CODIGO "+ 
                   "AND beneotor.SEDE_CODIGO = sede.CODIGO "+
                   "AND subpro.PRG_CODIGO = prog.CODIGO "+
                   "AND beneficiario.CODIGO = beneotor.BEN_CODIGO "+
                   "AND beneotor.FECHA_BENEFICIO <= sysdate and prog.vigencia='A' and subpro.vigencia='A' ";
    
    int cantidad = 0;
    
    if((Object)criterea.getCodeSede() != null)
    {
      query += " and sede.CODIGO = "+criterea.getCodeSede();
    }
    if((Object)criterea.getCodeSubprograma() != null)
    {
      query += " and subpro.CODIGO = "+criterea.getCodeSubprograma();
    }
    if((Object)criterea.getCodePrograma() != null)
    {
      query += " and prog.CODIGO = "+criterea.getCodePrograma();
    }
    if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() != null)
    {
      query += "and beneotor.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/rrrr') and to_date('"+criterea.getHasta()+"','dd/mm/rrrr')";
    }
   
    query += " ORDER BY prog.NOMBRE,subpro.NOMBRE,sede.NOMBRE) ";
    
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);
    rst.next();
    
    cantidad = rst.getInt(1);
    
    rst.close();
    return cantidad;
  }
  
    public Integer getCantidadBeneficiarios(List filtros, ConnectionFactory cf, RepDetBeneficiarioVO criterea) throws SQLException
       {
        String filtrosGenerales = "'"+checkFiltros((Collection)filtros)+"'";
        String Desde = criterea.getDesde();
        String Hasta = criterea.getHasta();
        
        if(Desde != null){
            Desde = "'"+Desde+"'";
        }
        if(Hasta != null){
            Hasta = "'"+Hasta+"'";
        }
              
        conn = cf.getConnection();
        
        String strSql = "{call beneficios.PCS_CANTIDAD_BENEFICIARIOS("+
                    ""+filtrosGenerales+", '' , "+criterea.getCodeSede()+", "+criterea.getCodeSubprograma()+", "+
                    criterea.getCodePrograma()+","+Desde+", "+Hasta+", ?)}";
        
        CallableStatement stmt = conn.prepareCall(strSql);
        stmt.registerOutParameter(1, OracleTypes.CURSOR);
        stmt.execute();
        
        ResultSet rst = (ResultSet)stmt.getObject(1);
        
        rst.next();
               
        return (new Integer(rst.getInt(1)));
         
    }
    
  
  /*public Collection getBeneficiarios(RepDetBeneficiarioVO criterea) throws SQLException
  {
    String query = "SELECT TO_CHAR(beneotor.FECHA_BENEFICIO,'DD/MM/RRRR') fechabeneficio, beneotor.CODIGO codbeneotor, beneotor.BEN_CODIGO codbeneficiario, sede.CODIGO codsede, "+
                   "sede.NOMBRE nomsede, prog.CODIGO codpro, prog.NOMBRE nompro, "+
                   "subpro.CODIGO codsubpro, subpro.NOMBRE nomsubpro "+
                   "FROM TCS_BEN_PROGRAMA prog, TCS_BEN_SUBPROGRAMA subpro, "+
                   "TCS_BEN_BENEFICIO_OTORGADO beneotor, TCS_BEN_SEDE sede, "+
                   "TCS_BEN_BENEFICIARIO beneficiario "+  
                   "WHERE beneotor.SBPR_CODIGO =  subpro.CODIGO "+ 
                   "AND beneotor.SEDE_CODIGO = sede.CODIGO "+
                   "AND subpro.PRG_CODIGO = prog.CODIGO "+
                   "AND beneficiario.CODIGO = beneotor.BEN_CODIGO "+
                   "AND beneotor.FECHA_BENEFICIO <= sysdate and prog.vigencia='A' and subpro.vigencia='A' ";
    
    
    if((Object)criterea.getCodeSede() != null)
    {
      query += " and sede.CODIGO = "+criterea.getCodeSede();
    }
    if((Object)criterea.getCodeSubprograma() != null)
    {
      query += " and subpro.CODIGO = "+criterea.getCodeSubprograma();
    }
    if((Object)criterea.getCodePrograma() != null)
    {
      query += " and prog.CODIGO = "+criterea.getCodePrograma();
    }
    if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() != null)
    {
      query += "and beneotor.FECHA_BENEFICIO between to_date('"+criterea.getDesde()+"','dd/mm/rrrr') and to_date('"+criterea.getHasta()+"','dd/mm/rrrr')";
    }

//    if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() == null)
//    {
//      query += "and beneotor.FECHA_BENEFICIO >= '"+criterea.getDesde()+"'";
//    }
//    if((Object)criterea.getDesde() == null && (Object)criterea.getHasta() != null)
//    {
//      query += "and beneotor.FECHA_BENEFICIO <= '"+criterea.getHasta()+"'";
//    }
                 
    query += " ORDER BY prog.NOMBRE,subpro.NOMBRE,sede.NOMBRE ";
    ResultSet rst = null;
    ArrayList lbeneotor = new ArrayList();
    rst = cf.getRecordsRset(query,null,conn);
    RepDetBeneficiarioVO objbeneficiario = null;
    while ( rst.next() ) 
		{
        objbeneficiario = new RepDetBeneficiarioVO();
       
        objbeneficiario.setCodeSede(new Long (rst.getLong("codsede")));
        objbeneficiario.setNombreSede(rst.getString("nomsede"));
        objbeneficiario.setCodePrograma(new Long(rst.getLong("codpro")));
        objbeneficiario.setNombrePrograma(rst.getString("nompro"));
        objbeneficiario.setCodeSubprograma(new Long (rst.getLong("codsubpro")));
        objbeneficiario.setNombreSubprograma(rst.getString("nomsubpro"));
        objbeneficiario.setDesde(criterea.getDesde());
        objbeneficiario.setHasta(criterea.getHasta());
        objbeneficiario.setCodebeneficiario(new Long(rst.getString("codbeneficiario")));
        objbeneficiario.setCodebenotorgado(new Long(rst.getString("codbeneotor")));
        objbeneficiario.setFechabeneotorgado(rst.getString("fechabeneficio"));
        
        
        lbeneotor.add(objbeneficiario);
        
        objbeneficiario=null;
		}
  	rst.close();
    return lbeneotor;
  }*/
  
  public Collection getReporte(Collection atributosGenericos, 
                        Collection filtros, ConnectionFactory cf, RepDetBeneficiarioVO criterea) throws SQLException
  {
    Collection beneficiarios = new LinkedList();
    List latributosGenericos = (List)atributosGenericos;
    
    RepAtributoVO atrVO = null;
    
    cf.closeConnection(conn);
    
    String atriGenerales = null;
    String filtrosGenerales = "'"+checkFiltros(filtros)+"'";
    String Desde = criterea.getDesde();
    String Hasta = criterea.getHasta();
    
    if(Desde != null){
        Desde = "'"+Desde+"'";
    }
    if(Hasta != null){
        Hasta = "'"+Hasta+"'";
    }

    if(latributosGenericos.size() > 0){
        atriGenerales = "";
        
        for(int i = 0; i < latributosGenericos.size(); i++){
            atrVO = (RepAtributoVO)latributosGenericos.get(i);
            
            atriGenerales +=  atrVO.getNombre()+"|";           
        }
        
        atriGenerales = "'"+atriGenerales+"'";
    }    
          
    conn = cf.getConnection();
                
    String strSql = "{call beneficios.PCS_REPORTE_BENEFICIARIOS("+atriGenerales+", "+filtrosGenerales+", "+criterea.getCodeSede()+", " +
                criterea.getCodeSubprograma()+", "+criterea.getCodePrograma()+", "+Desde+", "+Hasta+", ? )}";
    
    CallableStatement stmt = conn.prepareCall(strSql);
    stmt.registerOutParameter(1, OracleTypes.CURSOR);
    stmt.execute();
    
    ResultSet rst = (ResultSet)stmt.getObject(1);
    BeneficiarioVO beneficiarioVO = null;
    
    while(rst.next()){
        beneficiarioVO = new BeneficiarioVO();
        if(atriGenerales != null){
            if(atriGenerales.indexOf("TIPO_DOCUMENTO") != -1){
                beneficiarioVO.setTipoDocumento(rst.getString("TIPO_DOCUMENTO"));
            }
            if(atriGenerales.indexOf("NUMERO_DOCUMENTO") != -1){
                beneficiarioVO.setNumeroDocumento(rst.getString("NUMERO_DOCUMENTO"));
            }
            if(atriGenerales.indexOf("PRIMER_NOMBRE") != -1){
                beneficiarioVO.setNombre1(rst.getString("PRIMER_NOMBRE"));
            }
            if(atriGenerales.indexOf("SEGUNDO_NOMBRE") != -1){
                beneficiarioVO.setNombre2(rst.getString("SEGUNDO_NOMBRE"));
            }
            if(atriGenerales.indexOf("PRIMER_APELLIDO") != -1){
                beneficiarioVO.setPrimerApellido(rst.getString("PRIMER_APELLIDO"));
            }
            if(atriGenerales.indexOf("SEGUNDO_APELLIDO") != -1){
                beneficiarioVO.setSegundoApellido(rst.getString("SEGUNDO_APELLIDO"));
            }
            if(atriGenerales.indexOf("DIRECCION_DESCRIPTIVA") != -1){
                beneficiarioVO.setDirDescriptiva(rst.getString("DIRECCION_DESCRIPTIVA"));
            }
            if(atriGenerales.indexOf("DIRECCION_ENCASILLADA") != -1){
                beneficiarioVO.setDirEncasillada(rst.getString("DIRECCION_ENCASILLADA"));
            }
            if(atriGenerales.indexOf("SEXO") != -1){
                beneficiarioVO.setSexo(rst.getString("SEXO"));
            }
            if(atriGenerales.indexOf("FECHA_NACIMIENTO") != -1){
                beneficiarioVO.setFechaNacimiento(rst.getString("FECHA_NACIMIENTO"));
            }
            if(atriGenerales.indexOf("VFL_CODIGO_COMUNA") != -1){
                beneficiarioVO.setVflComuna(rst.getString("VFL_CODIGO_COMUNA"));
            }
            if(atriGenerales.indexOf("VFL_CODIGO_ZONA") != -1){
                beneficiarioVO.setDescZona(rst.getString("VFL_CODIGO_ZONA"));
            }
            if(atriGenerales.indexOf("LOCALIZACION_COBAMA") != -1){
                beneficiarioVO.setCobama(rst.getString("LOCALIZACION_COBAMA"));
            }
            if(atriGenerales.indexOf("VFL_CODIGO_BARRIO") != -1){
                beneficiarioVO.setDescBarrio(rst.getString("VFL_CODIGO_BARRIO"));
            }
            if(atriGenerales.indexOf("TELEFONO") != -1){
                beneficiarioVO.setTelefono(rst.getString("TELEFONO"));
            }
            if(atriGenerales.indexOf("ETNIA") != -1){
                beneficiarioVO.setEtnia(rst.getString("ETNIA"));
            }
            if(atriGenerales.indexOf("CORREO_ELECTRONICO") != -1){
                beneficiarioVO.setMail(rst.getString("CORREO_ELECTRONICO"));
            }
            if(atriGenerales.indexOf("FICHA_SISBEN") != -1){
                beneficiarioVO.setFichaSisben(rst.getString("FICHA_SISBEN"));
            }
            if(atriGenerales.indexOf("HOGAR_SISBEN") != -1){
                beneficiarioVO.setHogar(rst.getString("HOGAR_SISBEN"));
            }
            if(atriGenerales.indexOf("ORDEN_SISBEN") != -1){
                beneficiarioVO.setOrdenSisben(rst.getString("ORDEN_SISBEN"));
            }
            if(atriGenerales.indexOf("NIVEL_SISBEN") != -1){
                beneficiarioVO.setNivelSisben(rst.getString("NIVEL_SISBEN"));
            }
            if(atriGenerales.indexOf("PUNTAJE_SISBEN") != -1){
                beneficiarioVO.setPuntajeSisben(rst.getString("PUNTAJE_SISBEN"));
            }
            if(atriGenerales.indexOf("FE_ENCUESTA_SISBEN") != -1){
                beneficiarioVO.setFechaEncuesta(rst.getString("FE_ENCUESTA_SISBEN"));
            }
            if(atriGenerales.indexOf("DISCAPACIDAD_SISBEN") != -1){
                beneficiarioVO.setDiscapacidad(rst.getString("DISCAPACIDAD_SISBEN"));
            }
            if(criterea.getCodePrograma() == null && criterea.getCodeSubprograma() == null && criterea.getCodeSede() != null){
                beneficiarioVO.setPrograma(rst.getString("NOMBRE_PROGRAMA"));
                beneficiarioVO.setBeneficio(rst.getString("NOMBRE_SUBPROGRAMA"));
                
            }else if(criterea.getCodePrograma() != null && criterea.getCodeSubprograma() == null){
                beneficiarioVO.setBeneficio(rst.getString("NOMBRE_SUBPROGRAMA"));
            }
        }
                
        beneficiarios.add(beneficiarioVO);
    }
    
    cf.closeConnection(conn);
    conn = null;
    
    return beneficiarios;
  }
  
  /*private Collection getAtributosGenerales(Collection atributosGenericos, 
                                           Long codeBOT, Long codeBen, Collection filtros) throws SQLException
  {
    Collection repAtributos = new LinkedList();
    List atr = (List)atributosGenericos;
    boolean vflex = false;
    boolean barrio = false;
    boolean zona = false;
    boolean comuna = false;
    String query = "select ";
    RepAtributoVO atrVO = null;
    for(int i = 0; i< atr.size(); i++)
    {
      atrVO = (RepAtributoVO)atr.get(i);
      String nombre = atrVO.getNombre();
      if(nombre.equals("TIPO_DOCUMENTO"))
      {
        query += " decode(ben."+nombre+",'C','Cedula de ciudadania', "+
                 " 'E','Cedula de extranjeria', 'N','Nit', 'P','Pasaporte', "+
                 " 'R','Registro civil','T','Tarjeta de identidad','O','Otro', "+
                 " 'I','NIP','U','NUIP','S','NISE','A','Cabildo',ben."+nombre+") TIPO_DOCUMENTO,";
      }else if(nombre.equals("ETNIA"))
      {
        query += " nvl(decode(ben."+nombre+",'A','Afrocolombiano', "+
                  " 'I','Indigena','O','Otro', "+
                 "ben."+nombre+"),' ') ETNIA,";
      }else if(nombre.equals("SEXO"))
      {
        query += " nvl(decode(ben."+nombre+",'F','Femenino', "+
                  " 'M','Masculino' ,ben."+nombre+"),' ') SEXO,";
      }else if(nombre.equals("VFL_CODIGO_BARRIO"))
      {
        query += " vflexBarrio.descripcion VFL_CODIGO_BARRIO, ";
        barrio = true;
        vflex = true;
      }else if(nombre.equals("VFL_CODIGO_ZONA"))
      {
        query += " vflexZona.descripcion VFL_CODIGO_ZONA, ";
        zona = true;
        vflex = true;
      }else if(nombre.equals("VFL_CODIGO_COMUNA"))
      {
        query += " vflexComuna.descripcion VFL_CODIGO_COMUNA, ";
        comuna = true;
        vflex = true;
      }else if(nombre.equals("FECHA_NACIMIENTO"))
      {
        query += " nvl(to_char(ben.FECHA_NACIMIENTO,'DD/MM/RRRR'),' ') FECHA_NACIMIENTO, ";   
      }else if(nombre.equals("FE_ENCUESTA_SISBEN"))
      {
        query += " nvl(to_char(ben.FE_ENCUESTA_SISBEN,'DD/MM/RRRR'),' ') FE_ENCUESTA_SISBEN, ";   
      }else{
        query += "nvl(ben."+nombre+",' ') "+nombre+" ,";
      }
    }
    if(!vflex)
    {
      query += "to_char(rownum) numero "+
             "from tcs_ben_beneficiario ben, "+
             "       tcs_ben_beneficio_otorgado bot "+
             " where bot.BEN_CODIGO = ben.CODIGO "+
             " and bot.CODIGO = "+codeBOT+
             " and ben.codigo = "+codeBen+
             checkFiltros(filtros);
    }else
    {
      query += "to_char(rownum) numero "+
             "from tcs_ben_beneficiario ben, ";
      
      if(barrio)
      {
        query += " paoyer.tcs_valor_flexible vflexBarrio, ";
      }
      if(zona)
      {
        query += " paoyer.tcs_valor_flexible vflexZona, ";
      }
      if(comuna)
      {
        query += " paoyer.tcs_valor_flexible vflexComuna, ";
      }
      query += " tcs_ben_beneficio_otorgado bot "+
               " where bot.BEN_CODIGO = ben.CODIGO "+
               " AND bot.FECHA_BENEFICIO <= sysdate "+
               " and bot.CODIGO = "+codeBOT+
               " and ben.codigo = "+codeBen+
             checkFiltros(filtros);
      if(barrio)
      {
        query += " and vflexBarrio.CODIGO (+)= VFL_CODIGO_BARRIO";
      }
      if(zona)
      {
        query += " and vflexZona.CODIGO (+)= VFL_CODIGO_ZONA";
      }
      if(comuna)
      {
        query += " and vflexComuna.CODIGO (+)= VFL_CODIGO_COMUNA";
      }
                     
    }
    
    ResultSet rst = cf.getRecordsRset(query,null,conn);
    
    RepAtributoVO atributo = null;
    
    while(rst.next())
    {
      for(int i = 0; i< atr.size(); i++)
      {
        checkFiltersGen = true;
        atrVO = (RepAtributoVO)atr.get(i);
        atributo = new RepAtributoVO();
        atributo.setNumeroAtributo(i+1);
        atributo.setNombre(atrVO.getEtiqueta());
        atributo.setValor(rst.getString(i+1));
        repAtributos.add(atributo);
      }  
    }
    if(atr.size() == 0) checkFiltersGen = true;
    
    return repAtributos;
  }*/
  
  /*public Collection getAtributosEspecificos(Collection atributosEspecificos,
                                            Long codeSubprograma, Long codeSede,
                                            Long codeBOT, Long codeBen, Collection filtros) throws SQLException
  {
    
    Collection repAtributos = new LinkedList();
    List atr = (List)atributosEspecificos;
    RepAtributoVO atrVO = null;      
    String query = "SELECT rownum numeroAtributo, atr.NOMBRE nombreAtributo, "+
                   "nvl(fcs_ben_valor_atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') valor "+
                   "from tcs_ben_beneficiario ben, "+
                   "tcs_ben_subprograma sub, "+
                   "tcs_ben_beneficio_otorgado bot, "+
                   "tcs_ben_subp_atr_beneficiario atr, "+
                   "tcs_ben_sede sede "+
                   "WHERE  ben.codigo = bot.ben_codigo "+
                   "AND sub.codigo = bot.sbpr_codigo "+
                   "AND sub.codigo = atr.sbpr_codigo "+
                   "AND sede.codigo = bot.sede_codigo "+
                   " AND bot.FECHA_BENEFICIO <= sysdate "+
                   "AND sub.codigo = "+codeSubprograma+
                   " AND sede.codigo = "+codeSede+
                   " AND bot.codigo = "+codeBOT+
                   " AND ben.codigo = "+codeBen;
    if(atr.size() > 0) query +=" AND atr.codigo in (";
    
    for(int i = 0; i< atr.size(); i++)
    {
      atrVO = (RepAtributoVO)atr.get(i);
      query += atrVO.getCodigo().toString()+",";
    }
    if(atr.size() > 0) query +="0) ";
    if((Object)filtros != null)
    {
      List lFiltros = (List)filtros;
      CondicionConsultaVO filtro= null;
      int cont_filtro = 0;
      for(int i=0;i<lFiltros.size();i++)
      {
        filtro = (CondicionConsultaVO)lFiltros.get(i);
        if(filtro.getOrigen().equals("E"))
        {
          cont_filtro++;
        }
      }
      //if(cont_filtro>0)
        //query += " and bot.codigo in ("+checkFiltros(filtros,codeSede,codeSubprograma,codeBen)+")";
    }
        query +=" order by ben.codigo, numeroAtributo ";
    
    //System.out.println(query);    
    ResultSet rst = cf.getRecordsRset(query,null,conn);
    RepAtributoVO atributo = null;
    while(rst.next())
    {
        checkFiltersEsp = true;
        atributo = new RepAtributoVO();
        atributo.setNumeroAtributo(rst.getInt("numeroAtributo"));
        atributo.setNombre(rst.getString("nombreAtributo"));
        atributo.setValor(rst.getString("valor"));
        repAtributos.add(atributo);
    }

    if(atr.size() == 0) repAtributos = null;
    rst.close();
    return repAtributos;
  }*/
  
  
  public String checkFiltros(Collection filtros)
  {
    List lFiltros = (List)filtros;
    CondicionConsultaVO filtro= null;
    String retorno="";
    if((Object)filtros != null)
    {
      for(int i=0;i<lFiltros.size();i++)
      {
        filtro = (CondicionConsultaVO)lFiltros.get(i);
        String operador = filtro.getCodfiltro();
        String tipoDato = filtro.getTipocampo();
        
        if(filtro.getOrigen().equals("G"))
        {
           retorno += " and ";
           if(tipoDato.equals("N"))
           {
              if(operador.equals("="))
              {
                retorno += " ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();  
              }else if(operador.equals("<>"))
              {
                retorno += " ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
              }else if(operador.equals("<="))
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
              }else if(operador.equals(">="))
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
              }else if(operador.equals("<"))
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
              }else if(operador.equals(">"))
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor();
              }else
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" "+filtro.getValor()+" and "+filtro.getValor2();
              }
             
           }else if(tipoDato.equals("A") || tipoDato.equals("L"))
           {
              if(operador.equals("="))
              {
                retorno += " UPPER(ben."+filtro.getCodcampo()+" ) "+operador+" ''"+filtro.getValor().toUpperCase()+"''";  
              }else if(operador.equals("<>"))
              {
                retorno += " UPPER(ben."+filtro.getCodcampo()+" ) "+operador+" ''"+filtro.getValor().toUpperCase()+"''";
              }
           }else
           {
              if(operador.equals("="))
              {
                retorno += " ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
              }else if(operador.equals("<>"))
              {
                retorno += " ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
              }else if(operador.equals("<="))
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
              }else if(operador.equals(">="))
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
              }else if(operador.equals("<"))
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
              }else if(operador.equals(">"))
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"''";  
              }else
              {
                retorno += "ben."+filtro.getCodcampo()+" "+operador+" ''"+filtro.getValor()+"'' and ''"+filtro.getValor2()+"''";
              }
           }
        }
      }
    } 
    return retorno;
  }
  
  /*public String checkFiltrosEspecificos(Collection filtros) throws SQLException
  {
    List lFiltros = (List)filtros;
    CondicionConsultaVO filtro= null;
    String retorno = "";
    if((Object)filtros != null){
        for(int i=0;i<lFiltros.size();i++)
        {
          filtro = (CondicionConsultaVO)lFiltros.get(i);
          if(filtro.getOrigen().equals("E"))
          { 
                if(filtro.getCodfiltro().equals("="))
               {
                 retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, bot.FECHA_BENEFICIO),'' '') = TO_CHAR(''"+filtro.getValor()+"'') ";
               }else if(filtro.getCodfiltro().equals("<>"))
               {
                 retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, bot.FECHA_BENEFICIO),'' '') <> TO_CHAR(''"+filtro.getValor()+"'') ";
               }else if(filtro.getCodfiltro().equals("<="))
               {
                 retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, bot.FECHA_BENEFICIO),'' '') <= TO_CHAR(''"+filtro.getValor()+"'') ";
               }else if(filtro.getCodfiltro().equals(">="))
               {
                 retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, bot.FECHA_BENEFICIO),'' '') >= TO_CHAR(''"+filtro.getValor()+"'') ";
               }else if(filtro.getCodfiltro().equals("<"))
               {
                 retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, bot.FECHA_BENEFICIO),'' '') < TO_CHAR(''"+filtro.getValor()+"'') ";
               }else if(filtro.getCodfiltro().equals(">"))
               {
                 retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, bot.FECHA_BENEFICIO),'' '') > TO_CHAR(''"+filtro.getValor()+"'') ";
               }else if(filtro.getCodfiltro().equals("between"))
               {
                 retorno += " AND NVL(Fcs_Ben_Valor_Atributo("+filtro.getCodcampo()+", bot.codigo, bot.FECHA_BENEFICIO),'' '') between TO_CHAR(''"+filtro.getValor()+"'') AND TO_CHAR(''"+filtro.getValor2()+"'')";
               }
            }
          }
    }
    return retorno;
  }*/
  
    public RepDetBeneficiarioVO getFilters(RepDetBeneficiarioVO objRepDetBen)throws SQLException
    {
        String strQuery = null;
        ResultSet rst = null;
        
        if(objRepDetBen.getCodeSede() != null)
        {
          strQuery = "SELECT NOMBRE" +
                     " FROM TCS_BEN_SEDE" +
                     " WHERE CODIGO = " + objRepDetBen.getCodeSede();
          rst = cf.getRecordsRset(strQuery,null,conn);
          rst.next();
          
          objRepDetBen.setNombreSede(rst.getString("NOMBRE"));
        }
        if(objRepDetBen.getCodePrograma()!= null)
        {
            strQuery = "SELECT NOMBRE" +
                       " FROM TCS_BEN_PROGRAMA" +
                       " WHERE CODIGO = " + objRepDetBen.getCodePrograma();
            rst = cf.getRecordsRset(strQuery,null,conn);
            rst.next();
            
            objRepDetBen.setNombrePrograma(rst.getString("NOMBRE"));
        }
        if(objRepDetBen.getCodeSubprograma() != null)
        {
        strQuery = "SELECT NOMBRE" +
                   " FROM TCS_BEN_SUBPROGRAMA" +
                   " WHERE CODIGO = " + objRepDetBen.getCodeSubprograma();
        rst = cf.getRecordsRset(strQuery,null,conn);
        rst.next();
        
        objRepDetBen.setNombreSubprograma(rst.getString("NOMBRE"));
        }
        
        if(rst != null)
            rst.close();
        
        return objRepDetBen;
        }
  
    /*public String checkFiltros(Collection filtros, Long codeSede, Long codeSubpro, Long codeBen) throws SQLException
      {
        List lFiltros = (List)filtros;
        CondicionConsultaVO filtro= null;
        String retorno="";
        Vector vRetorno = new Vector();
        int Estado = 0;
        boolean noCumple = false;
        for(int i=0;i<lFiltros.size();i++)
        {
          filtro = (CondicionConsultaVO)lFiltros.get(i);
          if(filtro.getOrigen().equals("E"))
          { 
              String strSQL = "SELECT bot.codigo codigo "+
                            "FROM TCS_BEN_BENEFICIARIO ben, TCS_BEN_SUBPROGRAMA sub, "+
                            "TCS_BEN_BENEFICIO_OTORGADO bot, TCS_BEN_SUBP_ATR_BENEFICIARIO atr, TCS_BEN_SEDE sede "+
                            "WHERE  ben.codigo = bot.ben_codigo "+
                            "AND sub.codigo = bot.sbpr_codigo "+
                            "AND bot.FECHA_BENEFICIO <= sysdate "+
                            "AND sub.codigo = atr.sbpr_codigo "+
                            "AND sede.codigo = bot.sede_codigo "+
                            "AND sub.codigo = "+codeSubpro+
                            " AND ben.codigo = "+codeBen+
                            " AND sede.codigo = "+codeSede;
               
               if(filtro.getCodfiltro().equals("="))
               {
                 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') = TO_CHAR('"+filtro.getValor()+"') "+
                           " AND atr.codigo = "+filtro.getCodcampo();
               }else if(filtro.getCodfiltro().equals("<>"))
               {
                 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') <> TO_CHAR('"+filtro.getValor()+"') "+
                           " AND atr.codigo = "+filtro.getCodcampo();
               }else if(filtro.getCodfiltro().equals("<="))
               {
                 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') <= TO_CHAR('"+filtro.getValor()+"') "+
                           " AND atr.codigo = "+filtro.getCodcampo();
               }else if(filtro.getCodfiltro().equals(">="))
               {
                 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') >= TO_CHAR('"+filtro.getValor()+"') "+
                           " AND atr.codigo = "+filtro.getCodcampo();
               }else if(filtro.getCodfiltro().equals("<"))
               {
                 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') < TO_CHAR('"+filtro.getValor()+"') "+
                           " AND atr.codigo = "+filtro.getCodcampo();
               }else if(filtro.getCodfiltro().equals(">"))
               {
                 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') > TO_CHAR('"+filtro.getValor()+"') "+
                           " AND atr.codigo = "+filtro.getCodcampo();
               }else if(filtro.getCodfiltro().equals("between"))
               {
                 strSQL += " AND NVL(Fcs_Ben_Valor_Atributo(atr.codigo, bot.codigo, bot.FECHA_BENEFICIO),' ') between TO_CHAR('"+filtro.getValor()+"') AND TO_CHAR('"+filtro.getValor2()+"')"+
                           " AND atr.codigo = "+filtro.getCodcampo();
               }
               
               ResultSet rst = cf.getRecordsRset(strSQL,null,conn);  
               if(rst.next())
               {
                 if(!noCumple)
                 {
                    vRetorno.add(rst.getString("codigo"));   
                 }
               }else
               {
                    vRetorno.removeAllElements();
                    noCumple = true;
               }
            }
          }
        if(vRetorno.size() > 0)
        {
          for(int k=0;k<vRetorno.size();k++)
          {
            retorno+=vRetorno.get(k)+",";
            
          }
          retorno+= "0";
        }else
        {
          retorno+= "0";
        }
        
        return retorno;
      }*/
    
 public Connection getConn()
 {
    return conn;
 }
}